| # Limitations (JavaTM IDL/JavaTM RMI over IIOP)

> This document lists some of the limitations regarding JavaTM IDL and JavaTM RMI over IIOP technology in this release of the JavaTM 2 Platform, Standard Edition (J2SETM). The limitations are outlined below.

> The Official Specifications for CORBA Support in J2SE 1.4 document provides information outlining with which OMG Specifications this implementation of the Java IDL and Java RMI over IIOP technologies comply.

> LIMITATIONS:

> - JavaTM SDK version interoperability

>   When a J2SETM 1.3.x client talks to a J2SE 1.4 server using RMI-IIOP and an unchecked or `RemoteException` is thrown by the server, the client will hang. Similarly, when the server is using J2SE 1.3.x and the client is using J2SE 1.4, the client will receive a CORBA `UNKNOWN` exception with minor code 0.

>   This issue is currently being addressed at the OMG in the Java to IDL RTF as issue 4795: http://cgi.omg.org/issues/java2idl-rtf.html#Issue4795.

> - Multiple Profile IOR

>   If an IOR has multiple profiles, the first IIOP profile is used for the invocation.

> - Multiple ORBs not allowed in persistent servers

>   This release of J2SE platform does not allow multiple ORB instantiations in persistent servers. If the persistent server is written using the Java RMI over IIOP APIs, instantiating JNDI's `InitialContext()` creates an ORB. To avoid creating multiple ORBs in this setting, you can set the `java.naming.ORB` system property to an ORB that is already initialized.

> - Locally optimized stubs

>   The IDL-to-Java compiler, `idlj`, does not generate locally optimized stubs. Using stubs with the local optimization generated by a different IDL-to-Java compiler with the Sun ORB will result in the Sun ORB not invoking portable interceptors for the local invocations. This is being resolved through an OMG issue.

>   The `rmic` compiler generates locally optimized stubs, but its `javax.rmi.CORBA.Util` delegate implementation always returns `false` for `isLocal`. The result is that the stubs never use the local optimization.

>   The Java CORBA ORB shipped with J2SE v.1.4 does use a locally optimized transport when it detects that the client and server are running within the same VM.

> - Single thread POA policy

>   As per the CORBA 2.3.1 specification, there can be two choices for Thread Policy for the Portable Object Adapter (POA): the ORB Controlled Model and the Single Thread Model. J2SE v.1.4 does not support the Single Thread Model.